/*
 * iShopPlace Project.
 */
package ishopplace.model.businessobject;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

/**
 * Cart business object.
 * 
 * @author <a href="mailto:derek@derekshen.com">Derek Y. Shen</a>
 */
public class Cart {
	private final Map itemMap = Collections.synchronizedMap(new HashMap());
	private final List itemList = Collections.synchronizedList(new ArrayList());

	public Cart() {
	}

	public List getCartItemList() { 
		return itemList;
	}
	
	public int getNumberOfItems() { 
		return itemList.size();
	}

	public boolean containsItemId(String itemId) {
	  return itemMap.containsKey(itemId);
	}

	public void addItem(Item item) {
	  	CartItem cartItem = (CartItem)itemMap.get(item.getItemId());
	  
	  	if (cartItem == null) {
			cartItem = new CartItem();
			cartItem.setItem(item);
			cartItem.setQuantity(1);
			itemMap.put(item.getItemId(), cartItem);
			itemList.add(cartItem);
	  	}
	}

	public Item removeItemById(String itemId) {
		CartItem cartItem = (CartItem) itemMap.remove(itemId);
		
	  	if (cartItem == null) {
			return null;
	  	} else {
			itemList.remove(cartItem);
			return cartItem.getItem();
	  	}
	}

	public void setQuantityByItemId(String itemId, int quantity) {
	  	CartItem cartItem = (CartItem) itemMap.get(itemId);
	  	cartItem.setQuantity(quantity);
	}

	public double getSubTotal() {
	  	double subTotal = 0;
	  	Iterator items = this.getCartItemList().iterator();
	  	while (items.hasNext()) {
			CartItem cartItem = (CartItem) items.next();
			subTotal += cartItem.getTotalPrice();
	  	}
	  	return subTotal;
	}
}
